/**
 * WebSocket 配置文件
 * 统一管理 WebSocket 连接配置
 */

// 环境配置
const ENV_CONFIG = {
  development: {
    WS_URL: 'ws://localhost:7272',
    REGISTER_URL: '127.0.0.1:1236'
  },
  production: {
    WS_URL: 'wss://your-domain.com:7272',
    REGISTER_URL: 'your-domain.com:1236'
  }
};

// 当前环境
const CURRENT_ENV = process.env.NODE_ENV || 'development';

// 获取当前环境的配置
export const WEBSOCKET_CONFIG = {
  ...ENV_CONFIG[CURRENT_ENV],
  
  // 心跳配置
  HEARTBEAT: {
    INTERVAL: 30000, // 心跳间隔(ms)
    TIMEOUT: 5000,   // 心跳超时(ms)
    RETRIES: 3       // 心跳重试次数
  },
  
  // 重连配置
  RECONNECT: {
    MAX_RETRIES: 5,      // 最大重连次数
    INTERVAL: 2000,      // 重连间隔基数(ms)
    BACKOFF_MULTIPLIER: 2 // 退避乘数
  },
  
  // 连接配置
  CONNECTION: {
    TIMEOUT: 10000, // 连接超时(ms)
    BUFFER_SIZE: 100 // 消息缓冲区大小
  }
};

// 消息类型定义
export const MESSAGE_TYPES = {
  // 系统消息
  CONNECT: 'connect',
  DISCONNECT: 'disconnect',
  ERROR: 'error',
  
  // 用户消息
  LOGIN: 'login',
  LOGIN_SUCCESS: 'login_success',
  LOGIN_FAILED: 'login_failed',
  
  // 聊天消息
  CHAT_MESSAGE: 'chat_message',
  MESSAGE_SENT: 'message_sent',
  TYPING: 'typing',
  
  // 位置相关
  LOCATION_CHECK: 'location_check',
  LOCATION_CHECK_QIANDAO: 'location_check_qiandao',
  
  // 群聊消息
  GROUP_CHAT: 'group_chat',
  GROUP_JOIN: 'group_join',
  GROUP_LEAVE: 'group_leave',
  
  // 心跳
  PING: 'ping',
  PONG: 'pong'
};

// 错误码定义
export const ERROR_CODES = {
  SUCCESS: 0,
  NETWORK_ERROR: 1000,
  CONNECTION_TIMEOUT: 1001,
  AUTH_FAILED: 1002,
  INVALID_MESSAGE: 1003,
  SERVER_ERROR: 1004,
  RATE_LIMIT: 1005
};

// 获取动态 WebSocket URL
export function getWebSocketUrl() {
  // #ifdef H5
  const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
  const hostname = window.location.hostname;
  const port = window.location.port ? `:${window.location.port}` : '';
  return `${protocol}//${hostname}${port}`;
  // #endif
  
  // #ifdef MP-WEIXIN
  return WEBSOCKET_CONFIG.WS_URL;
  // #endif
  
  // #ifdef APP-PLUS
  return WEBSOCKET_CONFIG.WS_URL;
  // #endif
}

// 获取当前用户信息
export function getCurrentUser() {
  try {
    const userInfo = uni.getStorageSync('userInfo');
    return userInfo ? {
      id: userInfo.id,
      nickname: userInfo.nickname,
      avatar: userInfo.avatar
    } : null;
  } catch (error) {
    console.error('获取用户信息失败:', error);
    return null;
  }
}